3.6.9.4 fmfma-単精度行列ベクトル積和演算の基本動作
あらかじめ行列レジスタに書かれた行列データをAとして 4 次元の単精度行列ベクトル積FMA (Ax+y)を行う。
行列レジスタから読み出した 8 行 8 列のブロックフロート単精度行列データのうち、0,2,4,6列目を抽出した 8 行 4 列の行列が使用される。
code:文法
fmfma $l(x|y) <src_x> <src_y> <dst_0> <dst_1>..
第 1 入力の$l(x|y)は読み出し元の行列レジスタであり、以下効果においてsideとして参照する。
第 2 入力の<src_x>および第 3 入力の<src_y>は読み出し元PEオペランドである。
<src_x>はブロックフロート単精度の値でアクセス語長は単語である。
基本動作において<src_y>は通常の単精度の値で、アクセス語長は長語である。
<dst_0> [<dst_1>..]は書き込み先PEオペランドである。
演算結果は複数のPEメモリに同時に書き込むことができるが、以下効果では簡単のため単一の書き込み先としてdstを指定した例を示している。
基本動作において演算結果は通常の単精度であり、書き込みのアクセス語長は長語である。
code:効果.py
for cycle= 0:4
forall chip,l2b,l1b,mab
ShortWord src_data_A88 = MEMchipl2bl1bmab.refer_matreg(side, ShortWord)
ShortWord src_data_x4 = MEMchipl2bl1bmab0:4.refer_pemem(src_x,cycle)
ShortWord src_data_y42 = MEMchipl2bl1bmab0:4.refer_pemem(src_y, cycle)
ShortWord dst_data8 = {0, 0, 0, 0, 0, 0, 0, 0}
for i = 0:8
for j = 0:4
dst_datai += src_data_Aij*2 * src_data_xj
dst_datai += src_data_yi/2i%2
forall pe
MEMchipl2bl1bmabpe.refer_pemem(dst,cycle) = dst_datape*2:(pe+1)*2